From e4699259fd289d7468fce8ac73c982e7e3e4e039 Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Tue, 29 Nov 2016 16:10:00 +1300 Subject: [PATCH] tests --- tests/check.rs | 214 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 tests/check.rs diff --git a/tests/check.rs b/tests/check.rs new file mode 100644 index 000000000..88cfdf92c --- /dev/null +++ b/tests/check.rs @@ -0,0 +1,214 @@ +extern crate cargotest; +extern crate hamcrest; + +use cargotest::is_nightly; +use cargotest::support::{execs, project}; +use hamcrest::assert_that; + +#[test] +fn check_success() { + let foo = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + version = "0.0.1" + authors = [] + + [dependencies.bar] + path = "../bar" + "#) + .file("src/main.rs", r#" + extern crate bar; + fn main() { + ::bar::baz(); + } + "#); + let bar = project("bar") + .file("Cargo.toml", r#" + [package] + name = "bar" + version = "0.1.0" + authors = [] + "#) + .file("src/lib.rs", r#" + pub fn baz() {} + "#); + bar.build(); + + let expected = if is_nightly() { 0 } else { 101 }; + assert_that(foo.cargo_process("check"), + execs().with_status(expected)); +} + +#[test] +fn check_fail() { + let foo = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + version = "0.0.1" + authors = [] + + [dependencies.bar] + path = "../bar" + "#) + .file("src/main.rs", r#" + extern crate bar; + fn main() { + ::bar::baz(42); + } + "#); + let bar = project("bar") + .file("Cargo.toml", r#" + [package] + name = "bar" + version = "0.1.0" + authors = [] + "#) + .file("src/lib.rs", r#" + pub fn baz() {} + "#); + bar.build(); + + assert_that(foo.cargo_process("check"), + execs().with_status(101)); +} + +#[test] +fn custom_derive() { + let foo = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + version = "0.0.1" + authors = [] + + [dependencies.bar] + path = "../bar" + "#) + .file("src/main.rs", r#" +#![feature(proc_macro)] + +#[macro_use] +extern crate bar; + +trait B { + fn b(&self); +} + +#[derive(B)] +struct A; + +fn main() { + let a = A; + a.b(); +} +"#); + let bar = project("bar") + .file("Cargo.toml", r#" + [package] + name = "bar" + version = "0.1.0" + authors = [] + [lib] + proc-macro = true + "#) + .file("src/lib.rs", r#" +#![feature(proc_macro, proc_macro_lib)] +#![crate_type = "proc-macro"] + +extern crate proc_macro; + +use proc_macro::TokenStream; + +#[proc_macro_derive(B)] +pub fn derive(_input: TokenStream) -> TokenStream { + format!("impl B for A {{ fn b(&self) {{}} }}").parse().unwrap() +} +"#); + bar.build(); + + let expected = if is_nightly() { 0 } else { 101 }; + assert_that(foo.cargo_process("check"), + execs().with_status(expected)); +} + +#[test] +fn check_build() { + if !is_nightly() { + return; + } + + let foo = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + version = "0.0.1" + authors = [] + + [dependencies.bar] + path = "../bar" + "#) + .file("src/main.rs", r#" + extern crate bar; + fn main() { + ::bar::baz(); + } + "#); + let bar = project("bar") + .file("Cargo.toml", r#" + [package] + name = "bar" + version = "0.1.0" + authors = [] + "#) + .file("src/lib.rs", r#" + pub fn baz() {} + "#); + bar.build(); + + assert_that(foo.cargo_process("check"), + execs().with_status(0)); + assert_that(foo.cargo_process("build"), + execs().with_status(0)); +} + +#[test] +fn build_check() { + if !is_nightly() { + return; + } + + let foo = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + version = "0.0.1" + authors = [] + + [dependencies.bar] + path = "../bar" + "#) + .file("src/main.rs", r#" + extern crate bar; + fn main() { + ::bar::baz(); + } + "#); + let bar = project("bar") + .file("Cargo.toml", r#" + [package] + name = "bar" + version = "0.1.0" + authors = [] + "#) + .file("src/lib.rs", r#" + pub fn baz() {} + "#); + bar.build(); + + assert_that(foo.cargo_process("build"), + execs().with_status(0)); + assert_that(foo.cargo_process("check"), + execs().with_status(0)); +} -- 2.30.2